#include <assert.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct bst {
    int data;
    struct bst *left;
    struct bst *right;
} Bst;

Bst *insert(Bst *root, int data);

bool isInTree(Bst *root, int data);

int getMax(Bst *root);
int getMin(Bst *root);

int getHeight(Bst *bst);

int maxNum(int a, int b);

bool isBst(Bst *root);
bool isBetween(Bst *root, int min, int max);

Bst *delete(Bst* root, int data);

int getSuccessor(Bst *root, int data);
Bst *findNode(Bst *root, int data);

void printValues(Bst *root);

int getNodeCount(Bst *root);